ad 1. To kwestia przyzwyczajenia. W systemach typu BSD jest bardzo
podobna składnia jak w nftables. Jest ona bardziej zwięzła i ekspresywna
– w jednej linii można zapisać to, co w iptables w kilku.
Znalezienie
błędu w regułach i obserwowanie przepływu jest możliwe przez zakładanie
liczników na reguły, przez dołączanie logowania ulog2 do reguł, albo
przez zastosowanie przykładowego narzędzia testującego w userspace (też
trzeba dodać do reguł odpowiednie akcje):
– http://wiki.nftables.org/wiki-...
Niezależnie od rodzaju firewalla można też zastosować narzędzie typu Scapy:
– http://www.secdev.org/projects...
I ustawiać jakieś nietypowe pole pakietu, a w łańcuchach już mieć poustawiane np. logowania pakietów z tym polem.
Jest też, wspomniana w artykule, deklaracja decyzyjna meta nftrace
, która uruchamia śledzenie ścieżki pakietu o podanych kryteriach w całym stosie nf_tables
. Przypomina to cel TRACE
znany z iptables i polega na ustawieniu odpowiedniej flagi dla
pasującego pakietu. Można taką flagę ustawić z niskim priorytetem w
łańcuchu podpiętym do wejścia interfejsu (ale może już po defragmentacji
pakietów, czyli prio -300), i oznaczać pakiety, które chcemy śledzić.
Więcej o tej akcji:
– http://wiki.nftables.org/wiki-...
ad
2. Najważniejszą zaletą jest generyczne podejście do filtrowania, tzn. w
kernelu jest niskopoziomowy filtr, a wszelkie specyficzne dla
protokołów cuda robione są w oprogramowaniu, które kompiluje pseudokod i
stworzone filtry wysyła do modułu jądra.
W przypadku filtrów,
które są zbyt specyficzne (np. iptables) z biegiem czasu pojawia się
problem z utrzymywaniem dużej bazy specyficznych modułów obsługi.
Przykład: korzystamy z dodatkowych komunikatów ICMP wysyłanych do
nadawcy, gdy pakiet ma być odrzucony (reject), których obsługę zapewnia
moduł. Po aktualizacji kernela i drobnej zmianie ścieżki przepływu w
podsystemie Netfilter, moduł przestaje działać, bo jego maintainter
dostał ostatnio nową pracę i nie ma czasu się zająć uaktualnieniem.
Druga
ważna sprawa to utrzymywanie stałych struktur. Im więcej protokołów i
punktów Netfiltera ma być obsługiwanych, tym więcej operacji lookup,
które poszukują reguł w miejscach, w których powinny się znaleźć, gdyby
tam były. W przypadku maszyny wirtualnej podejście jest trochę inne, bo
realizowane są tylko te filtry, które naprawdę wprowadzono. To oznacza w
procku mniej operacji JMP dla każdego pakietu, który się pojawia.